home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- import sys
- import types
- import urllib
- import string
- import random
- from Crypto.Cipher import AES
-
- try:
- import _winreg
- except ImportError:
- _winreg = None
-
- license_url = 'http://spamexperts.com/cgi-bin/get_license.py?code='
- key = 'nHFTCDX9tbPjQXIDjrOYdPuo0SF1ssaU'
- crypt = AES.new(key)
- remote_key = 'dSxhrnoH4dOBZW8naSDeofcjJwm3S2AS'
- remote_crypt = AES.new(remote_key)
- if _winreg:
- reg_section = _winreg.HKEY_LOCAL_MACHINE
-
- reg_key = 'Software\\SpamExperts'
-
- def read_key(name):
- key = _winreg.CreateKey(reg_section, reg_key)
-
- try:
- return eval(_winreg.QueryValueEx(key, name)[0], { }, { })
- except WindowsError:
- pass
-
-
-
- def write_key(name, value):
- if not isinstance(value, types.StringTypes):
- raise AssertionError, 'Can only write strings.'
- key = _winreg.CreateKey(reg_section, reg_key)
- _winreg.SetValueEx(key, name, 0, _winreg.REG_SZ, repr(value))
-
-
- def remove_key(name):
- key = _winreg.CreateKey(reg_section, reg_key)
- _winreg.DeleteValue(key, name)
-
-
- def encrypt(s, crypter = crypt):
- s = s + '.' * (16 - len(s) % 16)
- return crypter.encrypt(s)
-
-
- def decrypt(s, crypter = crypt):
- if s is None:
- return s
-
- return crypter.decrypt(s).rstrip('.')
-
-
- def store_license(name, address, expiry):
- en_name = encrypt(name)
- en_address = encrypt(address)
- en_expiry = encrypt(str(expiry))
- write_key(encrypt('license_name'), en_name)
- write_key(encrypt('license_address'), en_address)
- write_key(encrypt('license_expiry'), en_expiry)
-
-
- def get_stored_license():
- en_name = read_key(encrypt('license_name'))
- en_address = read_key(encrypt('license_address'))
- en_expiry = read_key(encrypt('license_expiry'))
- if en_name is None and en_address is None or en_expiry is None:
- return (None, None, 0.0)
-
- name = decrypt(en_name)
- address = decrypt(en_address)
- expiry = decrypt(en_expiry)
- expiry = float(expiry)
- return (name, address, expiry)
-
-
- def get_expiry():
- return get_stored_license()[2]
-
-
- def get_code():
- return decrypt(read_key(encrypt('license_code')))
-
-
- def remove_code():
- remove_key(encrypt('license_code'))
-
-
- def update_license():
- (orig_name, orig_address, orig_expiry) = get_stored_license()
-
- try:
- code = get_code()
- url = license_url + code
- details = urllib.urlopen(url).read()
- (check, data) = details.split('\n', 1)
- (check, name_len, address_len, expiry_len) = check.split(' ')
- name_len = int(name_len)
- address_len = int(address_len)
- expiry_len = int(expiry_len)
- name = data[:name_len]
- address = data[name_len:name_len + address_len]
- expiry = data[name_len + address_len:-1]
- if check != 'license':
- print >>sys.stderr, "Couldn't download license details."
- raise Exception()
-
- name = decrypt(name, remote_crypt)
- address = decrypt(address, remote_crypt)
- expiry = float(decrypt(expiry, remote_crypt))
- except Exception:
- e = None
- print >>sys.stderr, e
- name = orig_name
- address = orig_address
- expiry = orig_expiry
-
- store_license(name, address, expiry)
- return (name, address, expiry)
-
- code_characters = string.uppercase + string.digits
-
- def number_to_code(x):
- s = []
- while x > 0:
- (x, y) = divmod(x, 10)
- c = y + 10 * random.randint(0, len(code_characters) / 10 - 1)
- s.append(code_characters[c])
- return ''.join(s)
-
-
- def code_to_number(x):
- n = 0
- for i, c in enumerate(x.upper()):
- n += 10 ** i * (code_characters.index(c) % 10)
-
- return n
-
-
- def generate_code():
- code = []
- for p in (23, 29, 31, 37):
- for i in xrange(5):
- s = _[1](_[1][random.choice(code_characters)])
- n = code_to_number(s)
- n += p - n % p
- if not n % p == 0:
- raise AssertionError
- ''.join if n > 99999 else []
- answer = number_to_code(n)
- if not code_to_number(answer) == n:
- raise AssertionError
- if len(answer) == 5:
- break
- continue
- code.append(number_to_code(n))
-
- return '-'.join(code)
-
-
- def check_license_validity(code = None):
- if code is None:
- code = decrypt(read_key(encrypt('license_code')))
-
- if code is None:
- return False
-
-
- try:
- (a, b, c, d) = [ code_to_number(x) for x in code.split('-') ]
- if b % 29 != 0:
- return False
-
- if c % 31 != 0:
- return False
-
- if d % 37 != 0:
- return False
- except Exception:
- return False
-
- return True
-
-
- def get_license(code):
- import MySQLdb
- db = MySQLdb.connect(host = 'localhost', db = 'spam_licenses', user = 'spam_licenses', passwd = 'beSE71rk')
- c = db.cursor()
- c.execute('SELECT * FROM `professional` WHERE `Code`="%s"' % (code,))
- rows = c.fetchall()
- c.close()
- if not rows:
- return 'notfound a b c'
-
- (name, address, expiry, unused) = rows[0]
- en_name = encrypt(name, remote_crypt)
- en_address = encrypt(address, remote_crypt)
- en_expiry = encrypt(str(expiry), remote_crypt)
- return 'license %d %d %d\n%s%s%s' % (len(en_name), len(en_address), len(en_expiry), en_name, en_address, en_expiry)
-
-
- def store_code(code):
- write_key(encrypt('license_code'), encrypt(code))
-
- if __name__ == '__main__':
- for i in xrange(int(sys.argv[1])):
- code = generate_code()
- if not len(code) == 23:
- raise AssertionError, code
- if not check_license_validity(code):
- raise AssertionError
- print code
-
-
-